home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / cprog.EXE / BIGSORT.C < prev    next >
Text File  |  1996-07-05  |  3KB  |  124 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4.  
  5. short int sortcolumn=0;        /* Which column will we sort from? */
  6.  
  7. strcmpn(first, second)        /* reverse order sort */
  8. char    *first;
  9. char    *second;
  10. {
  11.     while (*first == *second) {
  12.        if (*first) {
  13.            first++;
  14.            second++;
  15.        }
  16.        else return 0;
  17.     }
  18.     return *second - *first;
  19. }
  20.  
  21. void show_help()
  22. {
  23.  fputs("\nThis program can sort large ASCII files, very quickly.\n",stderr);
  24.  fputs("Recommended input file size: 0 - 600K \n",stderr);
  25.  fputs("\nThe syntax is : BIGSORT [/+nn][/I|/R] < infile > outfile\n\n",stderr);
  26.  fputs("where:\n",stderr);
  27.  fputs("* infile: the name of your input file (default, keyboard)\n",stderr);
  28.  fputs("* outfile:the name of your output file(default, screen)\n\n",stderr);
  29.  fputs("Options: /I makes BIGsort case-insensitive.\n",stderr);
  30.  fputs("         /R Reverses the sort order (Z->A)\n",stderr);
  31.  fputs("         /+nn begins sorting at column 'nn'\n\n",stderr);
  32.  fputs("If you find this program valuable, please contribute to the\n",stderr);
  33.  fputs("public domain idea - Send a $10 check to the above address.\n",stderr);
  34.  fputs("Thank You!\n",stderr);
  35.  exit(0);
  36. }
  37.  
  38. /****************************************************/
  39. /* Quick Sort on a string array                     */
  40. /****************************************************/
  41. /* Inputs: an array (pa) of pointers to the data  - any kind of data.
  42.    NA: number of items
  43.    pcomp: the address of a function of comparison
  44. */
  45.  
  46. int qsort(pa,na, pcomp)
  47. char *pa[];
  48. int na;
  49. int (*pcomp) ();
  50. {
  51.         int i,j,temp,nr;
  52.         char *ptemp,*ppart;
  53.  
  54.         if (na<2) return;
  55.  
  56.         ppart = pa[na/2];
  57.         i = -1; j = na;
  58.  
  59.         while (1)
  60.         {
  61.           do { i++; } while ((*pcomp)(pa[i]+sortcolumn,ppart+sortcolumn)<0);
  62.           do { j--; } while ((*pcomp)(pa[j]+sortcolumn,ppart+sortcolumn)>0);
  63.  
  64.           if (i>=j) break;
  65.  
  66.           ptemp = pa[i];    pa[i] = pa[j];
  67.           pa[j] = ptemp;
  68.  
  69.         }
  70.  
  71.         nr = na - i;
  72.  
  73.         if (i<na/2)
  74.         {       qsort(pa,i,pcomp);
  75.                 qsort (&(pa[i]), nr, pcomp);
  76.         }
  77.         else
  78.         {
  79.                 qsort (&(pa[i]),nr, pcomp);
  80.                 qsort (pa , i, pcomp);
  81.         }
  82. }
  83.  
  84. void main(argc,argv)
  85. int argc;
  86. char *argv[];
  87. {
  88.      int i,j;
  89.      int (*fun) ();
  90.      char *p[5000];
  91.      char buffer[1024];
  92.      
  93.      fputs("BIGsort V2.0 (C)1988 Turgut Kalfaoglu, 1378 Sok.8/10, Izmir 35210, Turkey\n",stderr);
  94.      fputs("Use BIGSORT HELP for info\n",stderr);
  95.  
  96.      fun = strcmp;
  97.  
  98.      for (i=1;i<argc;i++)
  99.      {    if (strcmpi("/I",argv[i])==0)
  100.                fun = strcmpi;
  101.  
  102.           if (*(argv[i])=='/' && *(argv[i]+1)=='+')
  103.                sortcolumn=atoi(argv[i]+2)-1;
  104.  
  105.           if (strcmpi("HELP",argv[i])==0)
  106.                show_help();
  107.             
  108.         if (strcmpi("/R",argv[i])==0)
  109.             fun = strcmpn;
  110.  
  111.      }
  112.      i=0;
  113.      while (gets(buffer))   /* Read in file */
  114.      {
  115.         if (i>4998 || ( p[i] = (char *) calloc(strlen(buffer)+1, sizeof(char))) == NULL)
  116.         {    fputs("BIGtrouble: Out of memory",stderr);
  117.               exit(1);
  118.         }
  119.         strcpy(p[i++],buffer);
  120.      }
  121.      qsort(p,i, fun);
  122.      for (j=0;j<i;j++) puts(p[j]);
  123. }
  124.